// cargo build
// cargo run

mod basic;

fn main() {
    let s = String::from("broadcast");

    let part1 = &s[0..5];
    let part2 = &s[5..9];

    println!("{}={}+{}", s, part1, part2);
}

fn dangle() -> &String {
    let s = String::from("hello");

    return &s;
}


// fn main() {
//     // 变量的值可以"重新绑定"，但在"重新绑定"以前不能私自被改变，这样可以确保在每一次"绑定"之后的区域里编译器可以充分的推理程序逻辑。
//     // 虽然 Rust 有自动判断类型的功能，但有些情况下声明类型更加方便：
//
//     // immutable variable and can be def again
//     let a: i8 = 12;
//     // mutable
//     let mut b: i8 = 123;
//     // const value
//     const c: i32 = 123;
//
//     // 重影（Shadowing）
//     // 重影与可变变量的赋值不是一个概念，重影是指用同一个名字重新代表另一个变量实体，其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。
//     basic::shadowing();
//
//
//     // let s1 = String::from("hello");
//     // let s2 = s1;
//     // println!("{}, world!", s1); // 错误！s1 已经失效
//
//
//     let s1 = String::from("hello");
//     let s2 = s1.clone();
//     println!("s1 = {}, s2 = {}", s1, s2);
// }
